package org.rainbowinverted.charging.device.api.operation.constants;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 设备op常数枚举
 * 递增规则：
 * a、0x0100 ～ 0x0000 定义为设备基础操作
 * b、0xffff ～ 0x0100 定义为设备业务操作
 * 递增步长为2，原因是设备回复操作码经常为设备操作编码 + 1
 * @author huaiping
 */
@Getter
@AllArgsConstructor
public enum DeviceOpConstantEnum {
    /**
     * 设备连接
     */
    CONNECT(0x0001, "设备连接"),
    /**
     * 设备连接响应
     */
    CONNECT_RESP(0x0002, "设备连接响应"),
    /**
     * 设备连接
     */
    DISCONNECT(0x0003, "设备断开连接"),
    /**
     * 心跳
     */
    HEARTBEAT(0x0005, "设备心跳"),
    /**
     * 心跳响应
     */
    HEARTBEAT_RESP(0x0006, "设备心跳响应"),
    /**
     * 升级设备 ftp
     */
    UPDATE_DEVICE_FTP(0x0009, "升级设备"),
    /**
     * 升级设备响应
     */
    UPDATE_DEVICE_FTP_RESP(0x000A, "升级设备响应"),
    /**
     * 更新设备二维码
     */
    UPDATE_DEVICE_QR(0x000B, "更新设备二维码"),
    /**
     * 更新设备二维码响应
     */
    UPDATE_DEVICE_QR_RESP(0x000C, "更新设备二维码响应"),
    /**
     * 重启设备
     */
    REBOOT(0x000D, "重启设备"),
    /**
     * 开始充电
     */
    START_CHARGE(0x0100, "开始充电"),
    /**
     * 开始充电响应
     */
    START_CHARGE_RESP(0x0101, "开始充电响应"),
    /**
     * 停止充电
     */
    STOP_CHARGE(0x0102, "停止充电"),
    /**
     * 停止充电响应
     */
    STOP_CHARGE_RESP(0x0103, "停止充电响应"),
    /**
     * 查询充电枪信息
     */
    QUERY_GUN_INFO(0x0104, "查询充电枪信息"),
    /**
     * 查询充电枪信息响应
     */
    QUERY_GUN_INFO_RESP(0x0105, "查询充电枪信息响应"),
    /**
     * 设备状态上报
     */
    DEVICE_STATUS_REPORT(0x0106, "设备状态上报"),
    /**
     * 设备状态上报响应
     */
    DEVICE_STATUS_REPORT_RESP(0x0107, "设备状态上报响应"),
    /**
     * 查询设备状态
     */
    QUERY_DEVICE_STATUS(0x0107, "查询设备状态"),
    /**
     * 查询设备状态响应
     */
    QUERY_DEVICE_STATUS_RESP(0x0109, "查询设备状态响应"),
    /**
     * 事件上报
     */
    DEVICE_EVENT_REPORT(0x0109, "设备事件上报"),
    /**
     * 事件上报响应
     */
    DEVICE_EVENT_REPORT_RESP(0x010B, "设备事件上报响应"),
    /**
     * 设备充电结束上报
     */
    DEVICE_CHARGE_FINISH_REPORT(0x010B, "设备充电结束"),
    /**
     * 设备充电结束上报响应
     */
    DEVICE_CHARGE_FINISH_REPORT_RESP(0x010D, "设备充电结束响应"),
    /**
     * 执行命令
     */
    EXECUTE_CMD(0x010D, "执行命令"),
    /**
     * 控制开关
     */
    CONTROL_ON_OFF(0x010E, "控制开关"),
    /**
     * OTA更新
     */
    OTA_UPDATE(0x110, "OTA更新"),
    /**
     * OTA更新响应
     */
    OTA_UPDATE_RESP(0x111, "OTA更新响应");

    /**
     * 操作代码
     */
    private final Integer opCode;
    /**
     * 操作名称
     */
    private final String opName;
}
